package com.jt.redis;

import redis.clients.jedis.Jedis;

import java.util.List;

/**
 * 演示抢购秒杀队列
 * 数据结构list
 * 算法FIFO
 * 数据存储结构：Redis中的list类型进行存储
 *
 * 在抢购活动中会执行这样操作:
 * 1)生产者（购买商品的用户）：创建请求并将请求存储到队列
 * 2）消费者（处理购买请求的底层对象）：从队列取请求，然后处理请求
 */
public class SecondKillDemo01 {
    /**
     * 入队操作
     */
    public static void enque(String request){
        Jedis jedis = new Jedis("192.168.126.129",6379);
        jedis.lpush("queue-1", request);
        jedis.close();
    }

    /**
     * 出队操作
     */
    public static String deque(){
        Jedis jedis = new Jedis("192.168.126.129",6379);
        //阻塞式方法
        List<String> request = jedis.brpop(3, "queue-1");
        jedis.close();
        return request.get(1);
    }

    public static void main(String[] args) {
        //1、构建生产者对象
        Thread t1 = new Thread(){
            @Override
            public void run() {
                for(int i = 0;i<10;i++){
                    enque("queue-1"+i);
                }
            }
        };
        //2、构建消费者对象
        Thread t2 = new Thread(){
            @Override
            public void run() {
                for(;;){
                    String request = deque();
                    System.out.println("process "+request);
                }
            }
        };
        t1.start();
        t2.start();

    }
}
